RTCM 1005 解析
发布时间:2024-07-19
归档分类:
标签:

前言

RTCM 是一种普遍采用的数据传输格式,它是由国际海运事业无线电技术委员会提出的,用于制定在差分全球导航定位系统和实时动态操作时使用的标准。

下面是技术规范文档:

第一个文档是官方的,包含了很多的细节,但是需要付费,虽说有其他方式获得,但版权原因还是不在此贴出;

第二个文档是北云科技的,中文文档虽说少了一些细节,但终究方便阅读,虽然本文不会参考它 :)

文档解读

RTK的消息类型有很多,初看会很懵,但在只要找到自己想要了解的消息类型即可,在文档的 3.2 节 Message Type Summary 中有详细的介绍,本文主要关注 1005 这个消息类型,它由 19 个字节也就是 152 个比特构成,它主要包含基准站位置数据信息,也就是基站的 ECEF 的坐标。

Screenshot from 2024-08-05 09-41-51.png

在正式阅读之前,还需要了解一下数据结构和类型,在文档的 3.3节 Data Types 有详细的介绍:

数据类型很好理解,它规定了数据的范围和构成,后面写程序做转换的时候要严格按照本节的数据结构来实现。

image.png

下面是这个协议具体的内容, 后面会详细分析:

image.png


解算

下面给出一段 RTCM 1005 的原始码流,它是十六进制的 ASCII :

D3 00 13 3E D7 D3 02 02 98 0E DE EF 34 B4 BD 62 AC 09 41 98 6F 33 36 0B 98

在手动计算之前,还需要了解一下它在传输时候的格式,RTCM 数据以帧的形式的传输

image.png

  • Preamble : 同步码(8 bits) , 11010011 ,其十六进制为 'D3'
  • Reserved : 保留(6 bits),000000,十六进制为 00
  • Message Length: 长度(10 bits),数据信息的长度,以字节数表示
  • Variable Length Data Message(0-1023 bytes): 可变长数据消息,长度不定,最大 1023 bytes
  • CRC:校验(24 bits)

所以 RCTM 1005 每帧大致长这样: 1101 0011 0000 00 + 长度 + 数据 + 校验

开头固定为 : 1101 0011 0000 00 ,十六进制就是 D30 ,我们再回头看一下原始码流:

D3 00 13 3E D7 D3 02 02 98 0E DE EF 34 B4 BD 62 AC 09 41 98 6F 33 36 0B 98

前三个十六进制 ASCII 码 我们就能解析出来了,后面紧跟着的是消息长度,它使用 10 个 bit 存储

Hex: D3 00 13
Binary: 1101 0011 0000 0000 0001 0011

所以,同步码 + 保留 + 长度 总共就用了 24 个 bit ,也就是 3 个字节

接下来就是可变长度的数据消息了,下面的表格就是 1005 类型的数据内容:

DATA FIELD                                  DF NUMBER   DATA TYPE   NO. OF BITS
-------------------------------------------------------------------------------
Message Number ("1005"=0011 1110 1101)      DF002       uint12      12
Reference Station ID                        DF003       uint12      12
Reserved for ITRF Realization Year          DF021       uint6       6
GPS Indicator                               DF022       bit(1)      1
GLONASS Indicator                           DF023       bit(1)      1
Reserved for Galileo Indicator              DF024       bit(1)      1
Reference-Station Indicator                 DF141       bit(1)      1
Antenna Reference Point ECEF-X              DF025       int38       38
Single Receiver Oscillator Indicator        DF142       bit(1)      1
Reserved                                    DF001       bit(1)      1
Antenna Reference Point ECEF-Y              DF026       int38       38
Quarter Cycle Indicator                     DF364       bit(2)      2
Antenna Reference Point ECEF-Z              DF027       int38       38
-------------------------------------------------------------------------------
TOTAL                                                               152

Message Number ("1005"=0011 1110 1101)

它的长度 12 个比特,也就是 3 个 Hex Ascii 码:

Hex: 3E D
Bin: 0011 1110 1101
Dec: 1005

将十六进制的 3ED Ascii 码转换为 十进制的数字,我们可以看到它正好是 1005

Reference Station ID

Hex: 7 D3
Bin: 0111 1101 0011
Dec: 2003

Reserved for ITRF Realization Year

Hex:02 02 Bin:0000 001 00000 0010(取前 6 位 ,也就是 0000 00 = 0)

GPS Indicator

Hex: 02 02

Bin:0000 00**1 **00000 0010 (取第 7 位 ,也就是 1)

GLONASS Indicator

Hex: 02 02

Bin:0000 0010 0000 0010 (取第 8 位 ,也就是 0)

Reserved for Galileo Indicator

Hex: 02 02

Bin:0000 0010 0000 0010 (取第 9 位 ,也就是 0)

Reference-Station Indicator

Hex: 02 02

Bin:0000 0010 0000 0010 (取第 10 位 ,也就是 0)

Antenna Reference Point ECEF-X

它的长度是 38 bits

Hex: 02 98 0E DE EF

Bin: 0000 0010 1001 1000 0000 1110 1101 1110 1110 1111

Dec: 11141045999

Single Receiver Oscillator Indicator

Hex: 34

Bin: 0011 0100 (取第 1 位, 也就是0)

Reserved

Hex: 34

Bin: 0011 0100 (取第 2 位, 也就是0)

Antenna Reference Point ECEF-Y

它的长度是 38 bits

Hex: 34 B4 BD 62 AC

Bin: 0011 0100 1011 0100 1011 1101 0110 0010 1010 1100

二进制最高位是 1 ,为负数,所以要取反再加1

补码: 10 1011 0100 1011 0100 0010 1001 1101 0101 0100

除去第一位的符号位,后面加粗的就是实际的数值

Bin: 0 1011 0100 1011 0100 0010 1001 1101 0101 0100

Hex: 4B 4B 42 9D 54

Dec: 48507297108

加上符号位就是 -48507297108

Quarter Cycle Indicator

Hex: 09

Bin: 00 00 1001(取前两位, 也就是 00)

Antenna Reference Point ECEF-Z

Hex : 09 41 98 6F 33

Bin: 0000 1001 0100 0001 1001 1000 0110 1111 0011 0011

Dec: 39755214643


到此为止,手动结算就已完成,若是关注 ECEF XYZ 的取值,则需要回看数据类型,它们的数据类型是 DF025、DF026、DF027

image.png

这张图详细地说明了 ECEF XYZ 的数据类型,数据范围,数据处理

其中,它是 int38 的有符号38位整数,数据是 0.0001 m

上面我们算得的数,都应做一个处理:

ECEF-X : 11141045999 * 0.0001 = 1114104.5999m

ECEF-Y: 48507297108*0.0001= -4850729.7108m

ECEF-Z:39755214643*0.0001 = 3975521.4643m

(完)